package net.suncaper.mvc.mapper;

import net.suncaper.mvc.model.domain.Room;

import java.util.List;

/**
 * Room表数据库访问接口
 */
public interface RoomMapper {
    /**
     * 添加房间信息
     * @param room 房间实体对象（包含房型、酒店名称等所有字段）
     * @return 操作结果（true：添加成功；false：添加失败）
     */
    boolean insertRoom(Room room);

    /**
     * 根据酒店名称查询所有房间
     * @param hotelName 酒店名称
     * @return 该酒店的所有房间列表（若不存在则返回空列表）
     */
    List<Room> selectRoomsByHotel(String hotelName);

    /**
     * 根据房型和酒店名称查询唯一房间
     * @param roomType 房型
     * @param hotelName 酒店名称
     * @return 匹配的房间信息（若不存在则返回null）
     */
    Room selectRoomByTypeAndHotel(String roomType, String hotelName);

    /**
     * 更新房间信息（基于房型和酒店名称定位）
     * @param room 包含更新信息的房间对象（必须包含roomType和hotelName用于定位）
     * @return 操作结果（true：更新成功；false：更新失败或房间不存在）
     */
    boolean updateRoom(Room room);

    /**
     * 删除房间信息（基于房型和酒店名称）
     * @param roomType 房型
     * @param hotelName 酒店名称
     * @return 操作结果（true：删除成功；false：删除失败或房间不存在）
     */
    boolean deleteRoom(String roomType, String hotelName);

    /**
     * 查询所有房间信息
     * @return 所有房间的列表（若表为空则返回空列表）
     */
    List<Room> selectAllRooms();

    /**
     * 创建订单时减少1个可用房间（每个订单对应1个房间）
     * @param roomType 房型
     * @param hotelName 酒店名称
     * @return 操作结果（true：减少成功；false：库存不足或房间不存在）
     */
    boolean decreaseAvailableCountByOne(String roomType, String hotelName);

    /**
     * 取消订单时增加1个可用房间
     * @param roomType 房型
     * @param hotelName 酒店名称
     * @return 操作结果（true：增加成功；false：房间不存在）
     */
    boolean increaseAvailableCountByOne(String roomType, String hotelName);
}